#include "Nodo.h"

Nodo::Nodo(vector <Vertice> e){
    int tamano = e.size();
    vec = e;
    primero = NULL;
    segundo = NULL;
    distancias = new double* [tamano];      
    for(int i = 0; i < tamano ; i++){       
        distancias[i] = new double [tamano];
    }
    cargarMatrizDistancias();
    for(int i = 0; i < tamano; i++){
        delete(distancias[i]);
    }
    delete(distancias);
}

double Nodo::calcularDistancia(Vertice a, Vertice b){
      return sqrt(pow(a.getX() - b.getX(),2) +
                pow(a.getY() - b.getY(),2) +
                pow(a.getZ() - b.getZ(),2));
}

void Nodo::cargarMatrizDistancias(){//llena la matriz de distancias y carga la mayor distancia...
    double mayor = -1;
    unsigned int tamano = vec.size();
    for(unsigned int i = 0; i < tamano; i++){
        for(unsigned int j = i+1; j < tamano; j++){
            distancias[i][j] = calcularDistancia(vec[i],vec[j]);
            if(mayor < distancias[i][j]){
                mayor = distancias[i][j];
                p = i;
                q = j;
            }
        }
    }
}

Nodo Nodo::getNodo(int nro) {
    if (nro == 1){
        return *primero;
    } else if (nro == 2){
        return *segundo;
    } else {
        cout << "ERROR, NUMERO DE NODO INVALIDO" << endl;
	throw new exception;  
    //Nodo invalido/no inicializado
    }
}


void Nodo::insertarNodo(int nro, Nodo *n){

    if(nro == 1){
        primero = n;
    } else if(nro == 2){
        segundo = n;
    } else {
        cout << "ERROR, NUMERO DE NODO INVALIDO" << endl;
    }
}


Nodo* Nodo::getRama(int nro){
    if(nro == 1){
        return primero;
    } else if(nro == 2) {
        return segundo;
    } else {
        cout << "ERROR, Numero de rama invalido" << endl;
        return NULL;
    }
}


void Nodo::eliminarNodo(int nro){
    if(nro == 1){
        //delete(primero);
            primero = NULL; 
    } else if(nro == 2){
        //delete(segundo);
            segundo = NULL; 
    } else {
        cout << "ERROR, NUMERO DE NODO INVALIDO, NO SE BORRO NINGUN NODO" << endl;
    }
}
